<html>
    <head>
        <title>数据库BLOB存储提供程序</title>
    </head>
    <body>
        <script>
            // 数据库BLOB存储提供程序

                    /*
                        BLOB存储数据库存储提供程序可以将BLOB存储在关系数据库中。


                            实现了两个数据库提供程序：

                                ①、用于EF Core 的  "Volo. Abp.BlosStoring.Database.EntityFrameworkCore"包
                                            因此，它可以将BLOB存储在EF Core支持的任何DBMS中。

                                ②、用于 MongoDB 的 "Volo. Abp.BlosStoring.Database.MongoDB" 包


                            阅读BLOB存储文档以了解如何使用BLOB存储系统。本文档仅介绍如何配置容器以使用数据库作为存储提供程序。
                    */

                    /*
                        一、安装



                                1、自动安装

                                        如果你基于"启动模板"创建了解决方案，则可以使用 abp add-module cli命令自动将相关包添加到你的解决方案中。

                                        在包含你的解决方案(.sln)文件的文件夹中打开命令提示符（终端）并运行以下命令：

                                            abp add-module Volo.Abp.BlobStoring.Database

                                        此命令将所有的NuGet包添加到解决方案的相应层。

                                        如果你使用EF Core ，它会添加必要的配置、添加新的数据库迁移并更新数据库。


                                2、手动安装

                                        在这里，此提供程序定义的所有NuGet包：

                                            ①、Volo.Abp.BlobStoring.Database.Domain.Shared

                                            ②、Volo.Abp.BlobStoring.Database.Domain

                                            ③、Volo.Abp.BlobStoring.Database.EntityFrameworkCore

                                            ④、Volo.Abp.BlobStoring.Database.MongoDB

                                        你可以只安装安装 Volo. Abp.BlosStoring.Database.EntityFrameworkCore 或 Volo.Abp.BlosStoring.Database.MongoDB（根据你的偏好），因为它们依赖于其他包。

                                        安装后，将 DepenedsOn属性添加到你的相关模块。  这里，上满列出的相关NuGet包定义的模块类列表：

                                            ①、BlobStoringDatabaseDomainModule

                                            ②、BlobStoringDatabaseDomainSharedModule

                                            ③、BlobStoringDatabaseEntityFrameworkCoreModule

                                            ④、BlobStoringDatabaseMongoDbModule

                                        每当你把模块的NuGet包添加到项目的时候，注意好需要确保配置模块依赖。

                                        如果你使用的是EF Core，你还需要设置"迁移DbContext"以将BLOB存储表添加到你的数据库模型中。

                                        调用 builder.ConfigureBlobStoring() 在 OnModelCreating 方法中的扩展方法以包含到你的DbContext的映射。

                                        然后你可以使用标准的 Add-Migration 和 Update-Database 命令在数据库中创建必要的表。
                    */

                    /*
                        二、配置  Configuraton

                                1、连接字符串  Connection String
                                        如果你使用Default连接字符串，则不需要任何额外的配置。

                                        如果要将独立的数据库用于BLOB存储，请在配置文件(appsettings.json)中使用AbpBlobString 作为连接字符串名称。

                                        在这种情况下，还要回个 EF Core Migration 文档 ("https://abp.io/docs/latest/framework/data/entity-framework-core/migrations")
                                        以了解如何为所需模块创建和使用不同的数据库。

                                
                                2、配置容器

                                        如果你仅使用数据库存储提供程序，则无需手动配置它，因为它是自动完成的。

                                        如果你使用多个存储提供程序，你可能需要配置它。

                                        如BLOB存储文档中所述，配置在模块类的ConfigureServices方法中完成：

                                        eg：  配置为默认容器使用数据库存储提供程序

                                            Configure<AbpBlobStoringOptions>(options =>
                                            {
                                                options.Containers.ConfigureDefault(container =>
                                                {
                                                    container.UseDatabase();
                                                });
                                            });

                                        请参阅BLOB存储文档以了解如何为特定容器配置此提供程序。
                    */

                    /*
                        三、附加信息

                                1、实体 (Entities)

                                        为此模块定义的实体：

                                            ①、DatabaseBlobContainer  （聚合根）表示存储在数据库中的容器。
                                            
                                            ②、DatabaseBlob 聚合根）表示数据库中的BLOB。
                                                

                                2、存储 Repositories

                                          IDatabaseBlobContainerRepository

                                          IDatabaseBlobRepository

                                     你还可以使用IRepository<DatabaseBlobContainer, Guid>和IRepository<DatabaseBlob, Guid>来获得IQueryable的强大功能。有关更多信息，请参阅存储库文档。     
                    */

                    /*
                        四、其他服务

                                DatabaseBlobProvider是实现数据库BLOB存储提供程序的主要服务，
                                
                                如果你想通过依赖注入覆盖/替换它（不要替换IBlobProvider接口，而是替换DatabaseBlobProvider类）。
                    */
        </script>
    </body>
</html>